Contenidos

Probaremos los siguientes:

  • Imágenes
    • SVG
    • Image
  • Video
    • Video
    • VimeoVideo
    • YoutubeVideo
  • Audio
    • Audio
  • Texto o Código
    • Code
    • FileLink y FileLinks
    • Javascript
    • Latex
    • Markdown
    • Math
    • Scribd Document
  • Otros
    • JSON
    • GEOJSon
    • TextDisplayObject
    • DisplayObject
    • DisplayHandle
    • Pretty

1. Antes de: principales errores

Mi principal aprendizaje es que lo que se genera son objetos de distintos tipos. Los objetos no se muestran por defecto. Si el objeto es el resultado de la celda, el objeto se despliega por defecto. Sino es el resultado de la celda, no se muestra.

Es posible mostrar uno o varios objetos, con la función display. Display funciona en jupyter notebook/lab, pero no en python o IPython.

from IPython.display import Audio
Audio("http://www.w3schools.com/html/horse.ogg")
from IPython.display import Audio
a = Audio("http://www.w3schools.com/html/horse.ogg")
from IPython.display import Audio, display
a = Audio("http://www.w3schools.com/html/horse.ogg")
display(a)
from IPython.display import Audio, Image, display
a = Audio("http://www.w3schools.com/html/horse.ogg")
i1 = Image(filename="2021-05-ipython-display/Python.png", width=100)
i2 = Image(filename="2021-05-ipython-display/Python.jpg", width=150)
display(a,i1,i2)

2. Diferencias Jupyter Notebook/Lab y Google Colab

En Jupyter Notebook puedes instalar cualquier versión de IPython. Acá probamos la versión 7.7; en Google Colab está instalado IPython 5.5.5, por lo que no funcionará todo.

 3 Imágenes

3.1 Image

Image(data=None,
      url=None,
      filename=None,
      format=None,
      embed=None,
      width=None,
      height=None,
      retina=False,
      unconfined=False,
      metadata=None)

Métodos o atributos del objeto creado:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload: Método para recargar el contenido del objeto, si fue creado desde url o archivo.
from IPython.display import Image
Image(filename="2021-05-ipython-display/Python.png", width=100)
from IPython.display import Image
Image(filename="2021-05-ipython-display/Python.jpg", width=150)
from IPython.display import Image
Image(filename="2021-05-ipython-display/Python.gif", width=100)
<IPython.core.display.Image object>
from IPython.display import Image
my_url = "https://raw.githubusercontent.com/sebastiandres/2021-05-IPython-display/master/images/Python.png"
Image(url=my_url, width=100)
None
from IPython.display import Image
import numpy as np
my_data = ""
a = Image(data=my_data)

Más información

from IPython.display import Image
Image?

2.18 SVG

class IPython.display.SVG(data=None,
                          url=None,
                          filename=None, 
                          metadata=None)

Un objeto SVG creado tiene los siguientes métodos o atributos:

  • data: Entrega los datos del SVG.
  • metadata: String con la metadata proporcionada en la creación.
  • reload: Método para recargar el SVG, si fue creado por url o filename.
from IPython.display import SVG
SVG(filename="2021-05-ipython-display/Python.svg")
image/svg+xml
from IPython.display import SVG
SVG(url="https://raw.githubusercontent.com/sebastiandres/2021-05-IPython-display/master/images/Python.svg")
image/svg+xml
from IPython.display import SVG, display
data = '<svg height="109.8461" id="svg2169" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.45.1" sodipodi:docbase="/home/bene/Desktop" sodipodi:docname="dessin-1.svg" sodipodi:version="0.32" version="1.0" width="110.4211" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n  <defs id="defs2171">\n    <linearGradient id="linearGradient11301" inkscape:collect="always">\n      <stop id="stop11303" offset="0" style="stop-color:#ffe052;stop-opacity:1"/>\n      <stop id="stop11305" offset="1" style="stop-color:#ffc331;stop-opacity:1"/>\n    </linearGradient>\n    <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient11307" inkscape:collect="always" x1="89.136749" x2="147.77737" xlink:href="#linearGradient11301" y1="111.92053" y2="168.1012"/>\n    <linearGradient id="linearGradient9515" inkscape:collect="always">\n      <stop id="stop9517" offset="0" style="stop-color:#387eb8;stop-opacity:1"/>\n      <stop id="stop9519" offset="1" style="stop-color:#366994;stop-opacity:1"/>\n    </linearGradient>\n    <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient9521" inkscape:collect="always" x1="55.549179" x2="110.14919" xlink:href="#linearGradient9515" y1="77.070274" y2="131.85291"/>\n  </defs>\n  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" height="184.25197px" id="base" inkscape:current-layer="layer1" inkscape:cx="-260.46312" inkscape:cy="316.02744" inkscape:document-units="px" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="624" inkscape:window-width="872" inkscape:window-x="5" inkscape:window-y="48" inkscape:zoom="0.24748737" pagecolor="#ffffff" width="131.10236px"/>\n  <metadata id="metadata2174">\n    <rdf:RDF>\n      <cc:Work rdf:about="">\n        <dc:format>image/svg+xml</dc:format>\n        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>\n      </cc:Work>\n    </rdf:RDF>\n  </metadata>\n  <g id="layer1" inkscape:groupmode="layer" inkscape:label="Calque 1" transform="translate(-473.36088,-251.72485)">\n    <g id="g1894" transform="translate(428.42338,184.2561)">\n      <path d="M 99.75,67.46875 C 71.718268,67.468752 73.46875,79.625 73.46875,79.625 L 73.5,92.21875 L 100.25,92.21875 L 100.25,96 L 62.875,96 C 62.875,96 44.9375,93.965724 44.9375,122.25 C 44.937498,150.53427 60.59375,149.53125 60.59375,149.53125 L 69.9375,149.53125 L 69.9375,136.40625 C 69.9375,136.40625 69.433848,120.75 85.34375,120.75 C 101.25365,120.75 111.875,120.75 111.875,120.75 C 111.875,120.75 126.78125,120.99096 126.78125,106.34375 C 126.78125,91.696544 126.78125,82.125 126.78125,82.125 C 126.78125,82.124998 129.04443,67.46875 99.75,67.46875 z M 85,75.9375 C 87.661429,75.937498 89.8125,78.088571 89.8125,80.75 C 89.812502,83.411429 87.661429,85.5625 85,85.5625 C 82.338571,85.562502 80.1875,83.411429 80.1875,80.75 C 80.187498,78.088571 82.338571,75.9375 85,75.9375 z " id="path8615" style="opacity:1;color:#000000;fill:url(#linearGradient9521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"/>\n      <path d="M 100.5461,177.31485 C 128.57784,177.31485 126.82735,165.1586 126.82735,165.1586 L 126.7961,152.56485 L 100.0461,152.56485 L 100.0461,148.7836 L 137.4211,148.7836 C 137.4211,148.7836 155.3586,150.81787 155.3586,122.53359 C 155.35861,94.249323 139.70235,95.252343 139.70235,95.252343 L 130.3586,95.252343 L 130.3586,108.37734 C 130.3586,108.37734 130.86226,124.03359 114.95235,124.03359 C 99.042448,124.03359 88.421098,124.03359 88.421098,124.03359 C 88.421098,124.03359 73.514848,123.79263 73.514848,138.43985 C 73.514848,153.08705 73.514848,162.6586 73.514848,162.6586 C 73.514848,162.6586 71.251668,177.31485 100.5461,177.31485 z M 115.2961,168.8461 C 112.63467,168.8461 110.4836,166.69503 110.4836,164.0336 C 110.4836,161.37217 112.63467,159.2211 115.2961,159.2211 C 117.95753,159.2211 120.1086,161.37217 120.1086,164.0336 C 120.10861,166.69503 117.95753,168.8461 115.2961,168.8461 z " id="path8620" style="opacity:1;color:#000000;fill:url(#linearGradient11307);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"/>\n    </g>\n  </g>\n</svg>'    
my_svg = SVG(data=data, metadata = "SVG creado por datos")
display(my_svg)
print(my_svg.metadata)
image/svg+xml
SVG creado por datos

Más información:

from IPython.display import SVG
SVG?

4 Video

4.1 Video

Video(data=None,
    url=None,
    filename=None,
    embed=False,
    mimetype=None,
    width=None,
    height=None,
    html_attributes='controls')
from IPython.display import Video
Video("2021-05-ipython-display/Python.webm",
      width=600,
      height=400)
from IPython.display import Video
Video("https://upload.wikimedia.org/wikipedia/commons/transcoded/b/b4/Ball_python_%28Python_regius%29_in_a_zoo.webm/Ball_python_%28Python_regius%29_in_a_zoo.webm.1080p.vp9.webm",
      width=600,
      height=400)
from IPython.display import Video
Video('2021-05-ipython-display/Python.webm', embed=True, html_attributes="no-controls muted autoplay", width=600, height=400)

Más información:

from IPython.display import Video
Video?

4.2 Vimeo Video

class VimeoVideo(id, 
                 width=400, 
                 height=300, 
                 **kwargs)

Un objeto Vimeo Video creado tiene los siguientes métodos o atributos:

  • iframe: String con la representación HTML del objeto.
from IPython.display import VimeoVideo, HTML
VimeoVideo(148751763, width=600, height=400)

Más información

from IPython.display import VimeoVideo
VimeoVideo?

4.3 Youtube Video

YouTubeVideo(id, 
             width=400, 
             height=300, 
             **kwargs)

Un objeto YouTube Video creado tiene los siguientes métodos o atributos:

  • iframe: String con la representación HTML del objeto.
from IPython.display import YouTubeVideo
YouTubeVideo("j9V78UbdzWI", width=600, height=400)

Más información

from IPython.display import YouTubeVideo
YouTubeVideo?

 5 Audio

5.1 Audio

Audio(data=None, 
    filename=None, 
    url=None, 
    embed=None, 
    rate=None, 
    autoplay=False, 
    normalize=True,
    element_id=None
)

Métodos del objeto (creado):

  • autoplay_attr
  • element_id_attr
  • metadata
  • reload
  • src_attr
from IPython.display import Audio
Audio("2021-05-ipython-display/Python.mp3")
Audio("https://upload.wikimedia.org/wikipedia/commons/transcoded/1/13/EN-Monty_Python-GT.ogg/EN-Monty_Python-GT.ogg.mp3",
      autoplay=True,
     )
# https://pages.mtu.edu/~suits/notefreqs.html 
from IPython.display import Audio
import numpy as np

N_secs, framerate = 2, 44100
t = np.linspace(0,N_secs,framerate*N_secs)
data = np.sin(2*np.pi*440*t) # nota musical do - C
Audio(data, rate=framerate)
from IPython.display import Audio
import numpy as np

N_secs, framerate = 1, 44100
t = np.linspace(0,N_secs,framerate*N_secs)
data = np.sin(2*np.pi*440*t)
zero = np.zeros(data.shape)
dataleft = np.concatenate([zero, data, zero, zero, data, data])
dataright = np.concatenate([data, zero, zero, data, zero, data])
Audio([dataleft, dataright], rate=framerate)

Más información:

Audio?

 6 Código o Texto

2.2 Code

Code(data=None, 
     url=None, 
     filename=None, 
     language=None)
  • Finalidad: Sirve para mostrar código de python (coloreado).
  • ¿Cuando sería util? Tienes un archivo y quieres mostrarlo en un notebook o rise, y en lugar de usar print usas esto para que tengo colores bonitos.
from IPython.display import Code
my_code = """print(" ".join(["hola","mundo"]))
a = 3
"""
Code(my_code, language="python")
print(" ".join(["hola","mundo"]))
a = 3
from IPython.display import Code
my_code = """console.log("hola" + " " + "mundo")
var a = 3
"""
Code(my_code, language="javascript")
console.log("hola" + " " + "mundo")
var a = 3
 
 

Más información

from IPython.display import Code
Code?

2.13 Latex

Latex(data=None, 
      url=None,
      filename=None, 
      metadata=None)

Métodos o atributos del objeto creado:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload(): Método para recargar el contenido del objeto, si fue creado desde url o archivo.
from IPython.display import Latex
Latex(r"$c = \sqrt{a^2 + b^2}$ pero $\alpha > \beta$")
$c = \sqrt{a^2 + b^2}$ pero $\alpha > \beta$
from IPython.display import Latex
my_url = ""
Latex(url=my_url)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-a22c41619303> in <module>
      2 from IPython.display import Latex
      3 my_url = ""
----> 4 Latex(url=my_url)

~/.local/lib/python3.7/site-packages/IPython/core/display.py in __init__(self, data, url, filename, metadata)
    635             self.metadata = {}
    636 
--> 637         self.reload()
    638         self._check_data()
    639 

~/.local/lib/python3.7/site-packages/IPython/core/display.py in reload(self)
    665             # Deferred import
    666             from urllib.request import urlopen
--> 667             response = urlopen(self.url)
    668             data = response.read()
    669             # extract encoding from header, if there is one:

/miniconda3/lib/python3.7/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    220     else:
    221         opener = _opener
--> 222     return opener.open(url, data, timeout)
    223 
    224 def install_opener(opener):

/miniconda3/lib/python3.7/urllib/request.py in open(self, fullurl, data, timeout)
    508         # accept a URL or a Request object
    509         if isinstance(fullurl, str):
--> 510             req = Request(fullurl, data)
    511         else:
    512             req = fullurl

/miniconda3/lib/python3.7/urllib/request.py in __init__(self, url, data, headers, origin_req_host, unverifiable, method)
    326                  origin_req_host=None, unverifiable=False,
    327                  method=None):
--> 328         self.full_url = url
    329         self.headers = {}
    330         self.unredirected_hdrs = {}

/miniconda3/lib/python3.7/urllib/request.py in full_url(self, url)
    352         self._full_url = unwrap(url)
    353         self._full_url, self.fragment = splittag(self._full_url)
--> 354         self._parse()
    355 
    356     @full_url.deleter

/miniconda3/lib/python3.7/urllib/request.py in _parse(self)
    381         self.type, rest = splittype(self._full_url)
    382         if self.type is None:
--> 383             raise ValueError("unknown url type: %r" % self.full_url)
    384         self.host, self.selector = splithost(rest)
    385         if self.host:

ValueError: unknown url type: ''

Más información

from IPython.display import Latex
Latex?

2.14 Markdown

Markdown(data=None, 
         url=None, 
         filename=None, 
         metadata=None)

Métodos o atributos del objeto creado:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload(): Método para recargar el contenido del objeto, si fue creado desde url o archivo.
from IPython.display import Markdown
my_markdown = '''
## Enfasis

**This is bold text**

__This is bold text__

*This is italic text*

_This is italic text_

~~Strikethrough~~

## Otros
(c) (C) (r) (R) (tm) (TM) (p) (P) +-
"Smartypants, double quotes" and 'single quotes'

'''
Markdown(my_markdown)

Enfasis

This is bold text

This is bold text

This is italic text

This is italic text

Strikethrough

Otros

(c) (C) (r) (R) (tm) (TM) (p) (P) +- "Smartypants, double quotes" and 'single quotes'

from IPython.display import Markdown
Markdown("2021-05-ipython-display/markdown_example.md")

2021-05-ipython-display/markdown_example.md

from IPython.display import Markdown
Markdown("http://github/x/y/x/markdown_example.md")

Más información

from IPython.display import Markdown
Markdown?

2.15 Math

Math(data=None, 
     url=None, 
     filename=None, 
     metadata=None)

Métodos o atributos del objeto creado:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload(): Método para recargar el contenido del objeto, si fue creado desde url o archivo.
from IPython.display import Math
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')
$\displaystyle F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx$

Más información

from IPython.display import Math
Math?

 7 Otros

class IPython.display.FileLink(path, 
                               url_prefix='', 
                               result_html_prefix='', 
                               result_html_suffix='<br>')
  • Finalidad: Embeber un archivo local que pueda ser clickeado, basado en una ruta (path).
  • Ejemplo: Cuando tu código hace referencia a un archivo de datos o README, y quieres que pueda abrirse fácilmente. O cuando generas un output, y quieres que un usuario lo mire.
from IPython.display import FileLink
FileLink("2021-05-ipython-display/latex.txt")
from IPython.display import FileLink
FileLink("2021-05-ipython-display/latex.txt", url_prefix="url_prefix", result_html_prefix='html_prefix', result_html_suffix='html_suffix')
html_prefix2021-05-ipython-display/latex.txthtml_suffix

Más información

from IPython.display import FileLink
FileLink?
class IPython.display.FileLinks(path, 
                                url_prefix='', 
                                included_suffixes=None, 
                                result_html_prefix='', 
                                result_html_suffix='<br>', 
                                notebook_display_formatter=None, 
                                terminal_display_formatter=None, 
                                recursive=True)
  • Finalidad: Embeber un archivo local que pueda ser clickeado, basado en una ruta (path).
  • Ejemplo: Cuando tu código hace referencia a un archivo de datos o README, y quieres que pueda abrirse fácilmente. O cuando generas un output, y quieres que un usuario lo mire.
from IPython.display import FileLinks
FileLinks("2021-05-ipython-display")
2021-05-ipython-display/
  markdown.md
  Python.webm
  Python.jpg
  Python.png
  code.js
  Python.svg
  code.py
  Python.gif
  latex.txt
  Image.txt
  math.txt
  Python.mp3

Más información

from IPython.display import FileLinks
FileLinks?
from IPython.display import FileLinks
print("Methods:")
print(sorted([f for f in dir(FileLinks) if not f.startswith('_')]))
Methods:
['html_link_str']

2.17 Progress Bar

class IPython.display.ProgressBar(
    total, # int >0
)

Un objeto Progress Bar creado tiene los siguientes métodos o atributos:

  • display(): Método que permite desplegar el objeto directamente.
  • progress: Atributo int >0 que permite cambiar el progreso realizado, int >= 0.
  • update(): Método que permite actualizar el display.
  • metadata: Atributo string de la metadata con la que fue creado el objeto.
  • Me parece que reload() no se usa o no aplica en este caso.
from IPython.display import ProgressBar
pb = ProgressBar(100)
pb.progress = 42
pb.display()
from IPython.display import ProgressBar
import time

pb = ProgressBar(100)
pb.display()
for i in range(0,101,5):
    pb.progress = i # No es necesario actualizar con pb.update(), solo modificar el valor
    time.sleep(.1) # Opcional

Más información:

from IPython.display import ProgressBar
ProgressBar?

2.19 Scribd Document

ScribdDocument(id, 
               width=400, 
               height=300, 
               **kwargs)

Un objeto Scribd Document creado tiene los siguientes métodos o atributos:

  • iframe: String con la representación HTML del objeto.
from IPython.display import ScribdDocument
ScribdDocument(56131068, width=300, height=400)

Más información

from IPython.display import ScribdDocument
ScribdDocument?

8. Sin representación gráfica directa

 2.3 Display Handle

class IPython.display.DisplayHandle(display_id=None)
  • Funcionalidad: Ni idea... ¿para actualizar un display??
  • Ejemplo: ??
from IPython.display import DisplayHandle
DisplayHandle(1) # ?
<DisplayHandle display_id=1>

Más información

from IPython.display import DisplayHandle
DisplayHandle?
from IPython.display import DisplayHandle
print("Methods:")
print(sorted([f for f in dir(DisplayHandle) if not f.startswith('_')]))
Methods:
['display', 'update']

2.4 Display Object

.. ..

Más información

from IPython.display import DisplayObject
DisplayObject?
from IPython.display import DisplayObject
print("Methods:")
print(sorted([f for f in dir(DisplayObject) if not f.startswith('_')]))

2.7 GeoJSON

GeoJSON(data : dict or list VegaLite data. Not an already-serialized JSON string.
        url_template : string - Leaflet TileLayer URL template
        layer_options : dict - Leaflet TileLayer options: http://leafletjs.com/reference.html#tilelayer-options
        url : unicode - A URL to download the data from.
        filename : unicode - Path to a local file to load the data from.
        metadata: dict - Specify extra metadata to attach to the json display object.
       )

Métodos o atributos del objeto creado:

  • data:
  • metadata:
  • reaload:

Mostrar un json geo

... no me funciona??

from IPython.display import GeoJSON

GeoJSON(data={
         "type": "Feature",
         "geometry": {
             "type": "Point",
             "coordinates": [-81.327, 296.038]
            }
 },
 url_template="http://s3-eu-west-1.amazonaws.com/whereonmars.cartodb.net/{basemap_id}/{z}/{x}/{y}.png",
 layer_options={
     "basemap_id": "celestia_mars-shaded-16k_global",
     "attribution" : "Celestia/praesepe",
     "minZoom" : 0,
     "maxZoom" : 18,
 })

Más información:

from IPython.display import GeoJSON
GeoJSON?
from IPython.display import GeoJSON
print("Methods:")
print(sorted([f for f in dir(GeoJSON) if not f.startswith('_')]))

2.11 JSON

JSON(
    data=None,
    url=None,
    filename=None,
    expanded=False,
    metadata=None,
    root='root',
    **kwargs,
)
from IPython.display import JSON
JSON({"name":"John", "age":31, "city":"New York"})

Más información

from IPython.display import JSON
JSON?
from IPython.display import JSON
print("Methods:")
print(sorted([f for f in dir(JSON) if not f.startswith('_')]))

2.16 Pretty

Pretty(data=None, 
       url=None, 
       filename=None, 
       metadata=None)

Métodos o atributos del objeto creado:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload(): Método para recargar el contenido del objeto, si fue creado desde url o archivo.

Más información

from IPython.display import Pretty
Pretty?
from IPython.display import Pretty
print("Methods:")
print(sorted([f for f in dir(Pretty) if not f.startswith('_')]))

2.20 TextDisplayObject

TextDisplayObject(data=None, 
                  url=None, 
                  filename=None, 
                  metadata=None)

No parece tener un display visual para jupyter notebook/lab, es más bien una estructura genérica.

Un objeto Text Display Object creado tiene los siguientes métodos o atributos:

  • metadata: Atributo string con la metadata con la que fue creado el objeto.
  • reaload(): Método para recargar el contenido del objeto, si fue creado desde url o archivo.
from IPython.display import TextDisplayObject
TextDisplayObject("Hmm, para que será esto??")

Más información

from IPython.display import TextDisplayObject
TextDisplayObject?
from IPython.display import TextDisplayObject
print("Methods:")
print(sorted([f for f in dir(TextDisplayObject) if not f.startswith('_')]))